package bean;

import java.sql.SQLException;
import java.text.ParseException;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpServletRequest;

import org.richfaces.component.UISelect;

import DAO.AvaliacaoAntropometricaDAO;
import DAO.PacienteDAO;
import Model.AvaliacaoAntropometrica;
import Model.Paciente;
import Utils.Uteis;

public class AvaliacaoAntropometricaBean {
	private int id;
	private Date dataAvaliacao;
	private double peso;
	private double altura;
	private int pressaoArterial;
	private double medidasCorporeas;
	private int idPaciente;
	private UISelect idPacienteValidation;
	private Paciente Paciente;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public UISelect getIdPacienteValidation() {
		return idPacienteValidation;
	}
	public void setIdPacienteValidation(UISelect idPacienteValidation) {
		this.idPacienteValidation = idPacienteValidation;
	}
	public Date getDataAvaliacao() {
		return dataAvaliacao;
	}
	public void setDataAvaliacao(Date dataAvaliacao) {
		this.dataAvaliacao = dataAvaliacao;
	}
	public double getPeso() {
		return peso;
	}
	public void setPeso(double peso) {
		this.peso = peso;
	}
	public double getAltura() {
		return altura;
	}
	public void setAltura(double altura) {
		this.altura = altura;
	}
	public int getPressaoArterial() {
		return pressaoArterial;
	}
	public void setPressaoArterial(int pressaoArterial) {
		this.pressaoArterial = pressaoArterial;
	}
	public double getMedidasCorporeas() {
		return medidasCorporeas;
	}
	public void setMedidasCorporeas(double medidasCorporeas) {
		this.medidasCorporeas = medidasCorporeas;
	}
	public int getIdPaciente() {
		return idPaciente;
	}
	public void setIdPaciente(int idPaciente) {
		this.idPaciente = idPaciente;
	}
	
	public String Salvar()
	{	
		try
		{
			java.sql.Date dtAvaliacao = Uteis.javaDate2SqlDate(this.dataAvaliacao);
			AvaliacaoAntropometrica avaliacao = new AvaliacaoAntropometrica();			
			
			avaliacao.setDataAvaliacao(dtAvaliacao);
			avaliacao.setPeso(this.peso);
			avaliacao.setAltura(this.altura);
			avaliacao.setPressaoArterial(this.pressaoArterial);
			avaliacao.setMedidasCorporeas(this.medidasCorporeas);
			avaliacao.setIdPaciente(this.idPaciente);			
			
			if(this.id > 0)
			{
				avaliacao.setIdAvaliacaoAntropometrica(this.id);
				AvaliacaoAntropometricaDAO.Update(avaliacao);
			}
			else
			{
				AvaliacaoAntropometricaDAO.Insert(avaliacao);				
			}		
		    
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Salvas com sucesso"));			
			
		}
		catch(ParseException pexc)
		{
			pexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}		
		catch(SQLException sexc)
		{
			sexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}		
		return "avaliacaoantropometrica_list";		
	}
		
	public String Editar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		AvaliacaoAntropometrica avaliacao = null;
		int id =  Integer.parseInt(request.getParameter("idavaliacao"));
		
		try
		{
			avaliacao = AvaliacaoAntropometricaDAO.LoadObject(id);			
		}
		catch(SQLException ex)
		{
			ex.printStackTrace();
		}
		
		if (avaliacao != null)
		{
			this.setId(avaliacao.getIdAvaliacaoAntropometrica());
			this.setIdPaciente(avaliacao.getPaciente().getIdPaciente());
			this.setDataAvaliacao(avaliacao.getDataAvaliacao());
			this.setPeso(avaliacao.getPeso());
			this.setAltura(avaliacao.getAltura());
			this.setPressaoArterial(avaliacao.getPressaoArterial());
			this.setMedidasCorporeas(avaliacao.getMedidasCorporeas());
		}
		
		return "avaliacaoantropometrica_edit";
	}
	
	
	public String Inativar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();		
		int id =  Integer.parseInt(request.getParameter("idavaliacao"));		
		
		try
		{
			AvaliacaoAntropometricaDAO.Delete(id);
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações inativadas com sucesso"));			
		}
		catch(SQLException sexc)
		{
			sexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao realizar a transação, contate o administrador do sistema"));
		}
		
		return "avaliacaoantropometrica_list";
	}
	
	public void validateData(FacesContext context, UIComponent uicomponent, Object value)
	{
		Date dataSel = (Date) value;
		try {
			if(dataSel.after(new Date()))
			{
				((UIInput)uicomponent).setValid(false);
				FacesMessage message = new FacesMessage();
				message.setDetail("A data não pode estar no futuro!");        	
				message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
				throw new ValidatorException(message);
			}	
			else
			{
				Object idPacienteSelect = this.idPacienteValidation.getLocalValue();	
				if(idPacienteSelect != null)
				{
					int idPaciente = Integer.parseInt(this.idPacienteValidation.getLocalValue().toString());
					Paciente paciente = PacienteDAO.LoadObject(idPaciente);
					if(dataSel.before(paciente.getDataNascimento()))
					{
						String data = Uteis.formatarData(paciente.getDataNascimento());
						((UIInput)uicomponent).setValid(false);
						FacesMessage message = new FacesMessage();					
						message.setDetail("A data não pode ser menor que "+ data +" que é data de nascimento do paciente! ");
						message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
						throw new ValidatorException(message);
					}						
				}
				else
				{
					((UIInput)uicomponent).setValid(false);
				}
			}	
			
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public Paciente getPaciente() {
		return Paciente;
	}
	public void setPaciente(Paciente paciente) {
		Paciente = paciente;
	}

}
